<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="xfgRV" id="xfgRV"><span data-lake-id="u0aedf353" id="u0aedf353">典型回答</span></h1>
  <p data-lake-id="ue52d4f1c" id="ue52d4f1c"><br></p>
  <p data-lake-id="u7a214749" id="u7a214749"><span data-lake-id="u9f6f71ae" id="u9f6f71ae">Redis是一个开源的内存数据库，那么他到底是AP的还是CP的呢？</span></p>
  <p data-lake-id="uad91259a" id="uad91259a"><span data-lake-id="u5a799864" id="u5a799864">​</span><br></p>
  <p data-lake-id="u42725e0b" id="u42725e0b"><span data-lake-id="u837603eb" id="u837603eb">有人说：单机的Redis是CP的，而集群的Redis是AP的？</span></p>
  <p data-lake-id="u13ddcf10" id="u13ddcf10"><strong><span data-lake-id="ua9b5fdc9" id="ua9b5fdc9">​</span></strong><br></p>
  <p data-lake-id="ubff092f6" id="ubff092f6"><span data-lake-id="u89a5b0f1" id="u89a5b0f1">但是我不这么认为，</span><strong><span data-lake-id="u0e1012f6" id="u0e1012f6">我觉得Redis就是AP的</span></strong><span data-lake-id="u2d646670" id="u2d646670">，虽然在单机Redis中，因为只有一个实例，他的一致性是有保障的，而一旦这个节点挂了，那么就没有可用性可言了。这么看上去好像是个CP系统。</span></p>
  <p data-lake-id="u04b189d3" id="u04b189d3"><span data-lake-id="u11bcaa20" id="u11bcaa20">​</span><br></p>
  <p data-lake-id="u244b0285" id="u244b0285"><span data-lake-id="u1b82ecaa" id="u1b82ecaa">但是，CAP是分布式场景中的理论，如果单机Redis，那就没啥分布式可言了。</span><strong><span data-lake-id="ud15f7a33" id="ud15f7a33">P都没有了，还谈什么AP、CP呢？</span></strong></p>
  <p data-lake-id="u4b5bd4d8" id="u4b5bd4d8"><span data-lake-id="uc2741ef0" id="uc2741ef0">​</span><br></p>
  <p data-lake-id="ud63754a8" id="ud63754a8"><br></p>
  <p data-lake-id="u87484263" id="u87484263"><span data-lake-id="ua1c4d73e" id="ua1c4d73e">那么，我们来说说，为啥Redis是AP的呢？</span></p>
  <p data-lake-id="u90e9b501" id="u90e9b501"><br></p>
  <p data-lake-id="ud180cd86" id="ud180cd86"><span data-lake-id="uf7928d56" id="uf7928d56">Redis的设计目标是高性能、高可扩展性和高可用性，</span><strong><span data-lake-id="u79c78ae2" id="u79c78ae2">Redis的一致性模型是最终一致性</span></strong><span data-lake-id="u8dfca504" id="u8dfca504">，即在某个时间点读取的数据可能并不是最新的，但最终会达到一致的状态。</span></p>
  <p data-lake-id="ud2c02db4" id="ud2c02db4"><span data-lake-id="uef96f4d5" id="uef96f4d5">​</span><br></p>
  <p data-lake-id="ue789ca9e" id="ue789ca9e"><span data-lake-id="u5941c02b" id="u5941c02b">Redis没办法保证强一致性的主要原因是，因为它的分布式设计中采用的是</span><strong><span data-lake-id="uc640093b" id="uc640093b">异步复制</span></strong><span data-lake-id="udcae33e6" id="udcae33e6">，这导致在节点之间存在数据同步延迟和不一致的可能性。</span></p>
  <p data-lake-id="u18105e61" id="u18105e61"><span data-lake-id="u23e06eec" id="u23e06eec">​</span><br></p>
  <p data-lake-id="u94aebaad" id="u94aebaad"><strong><span data-lake-id="ubd30cb69" id="ubd30cb69">也就是说，当某个节点上的数据发生改变时，Redis会将这个修改操作发送给其他节点进行同步，但由于网络传输的延迟等原因，这些操作不一定会立即被其他节点接收到和执行，这就可能导致节点之间存在数据不一致的情况。</span></strong></p>
  <p data-lake-id="ude423e47" id="ude423e47"><span data-lake-id="ub677613f" id="ub677613f">​</span><br></p>
  <p data-lake-id="u49ee476a" id="u49ee476a"><span data-lake-id="u4a994b72" id="u4a994b72">除此之外，Redis的一致性还受到了节点故障的影响。当一个节点宕机时，这个节点上的数据可能无法同步到其他节点，这就可能导致数据在节点之间的不一致。虽然Redis通过复制和哨兵等机制可以提高系统的可用性和容错性，但是这些机制并不能完全解决数据一致性问题。</span></p>
  <p data-lake-id="u2c44d96c" id="u2c44d96c"><br></p>
  <p data-lake-id="u5d9a9cb5" id="u5d9a9cb5"><br></p>
 </body>
</html>